package array_0823;

import java.util.Arrays;

public class Array {
    public static void main(String[] args) {
        int []arr=new int []{10,20};
        int []arr1=new int []{1,3,4,6,8,9};
        swapArr(arr);//指向引用访问的不是同一块空间
        System.out.println("arr[0]="+arr[0]+",arr[1]="+arr[1]);//不能完成数据交换
        int []ret=fiboN(10);
        for(int i:ret){
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.println(arr);//数组加密后的堆内存地址
        System.out.println(Arrays.toString(arr));//将内置数组变为字符串
        System.out.println(arrString(arr));
        int arr2[]=Arrays.copyOf(arr1,arr.length);
        int arr3[]=Arrays.copyOf(arr1,3);//拷贝前三个
        int arr4[]=Arrays.copyOfRange(arr1,1,4);//左闭右开
        System.out.println(Arrays.toString(arr2));
        System.out.println(Arrays.toString(arr3));
        System.out.println(Arrays.toString(arr4));


    }
    public static String arrString(int []arr){//模拟Array.toString()的功能
        String ret="[";
        for(int i=0;i<arr.length;i++){
            ret +=arr[i];
            if(i< arr.length-1){
                ret+=", ";
            }
        }
        ret+="]";
        return ret;
    }
    public static void swapArr(int []arr){
        arr=new int []{10,20};//在堆上开辟新空间，对新空间地址进行交换数据
        int tmp=arr[0];
        arr[0]=arr[1];
        arr[1]=tmp;
    }
    public static int []fiboN(int n){//斐波那契
        if(n<0)
            //null-空指针（空引用），引用数据类型的默认值
            //说明该引用没有保存任何地址
            return null;
        int[]arr=new int [n];
        arr[0]=arr[1]=1;
        for(int i=2;i<n;i++){
            arr[i]=arr[i-1]+arr[i-2];
        }
        return arr;
    }
}
